Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java Native Interface</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Java_Native_Interface"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_Native_Interface rootpage-Java_Native_Interface skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java Native Interface</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>Java Native Interface</b> (<b>JNI</b>) ist eine standardisierte <a href="Application_Programming_Interface" class="mw-redirect" title="Application Programming Interface">Anwendungsprogrammierschnittstelle</a> (API), die die Möglichkeit schafft, aus der Programmiersprache <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> heraus <a href="Plattform_(Computer)" title="Plattform (Computer)">Plattform-spezifische</a> <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktionen</a> bzw. <a href="Methode_(objektorientierte_Programmierung)" class="mw-redirect" title="Methode (objektorientierte Programmierung)">Methoden</a> aufzurufen.
</p><p>Im Gegensatz zu gewöhnlichen Java-Programmen ist ein Java-Programm, das JNI-Aufrufe verwendet, nur dann plattformunabhängig, wenn die native <a href="Programmbibliothek" title="Programmbibliothek">Programmbibliothek</a> auf allen Plattformen verfügbar ist.
</p>

<div class="mw-heading mw-heading2"><h2 id="Einsatzzweck">Einsatzzweck</h2></div>
<p>JNI ermöglicht es, native Methoden zu schreiben für Situationen, in denen es nicht möglich ist, ausschließlich Java als Programmiersprache einzusetzen. Dies ist der Fall, wenn beispielsweise die Standard-Java-Klassenbibliothek bestimmte Plattform-abhängige Features oder andere Programmbibliotheken nicht unterstützt. Weiterhin ist es per JNI möglich, eine weitere in einer anderen Programmiersprache programmierte Anwendung für Java zugreifbar zu machen. Viele Klassen der Java-Standardbibliothek basieren auf JNI, um beispielsweise die Datei-Ein- und Ausgabe oder Soundwiedergabe zu ermöglichen. Indem Java Leistungs- und Plattform-abhängige Implementierungen in die Standardbibliothek integriert, kann der Java-Programmierer und -Nutzer diese Features in sicherer und Plattform-unabhängiger Weise nutzen.
</p><p>Gelegentlich wird JNI als Fluchttür ("escape hatch") für Java-Entwickler bezeichnet, da es ihnen den Zugriff auf Funktionalitäten ermöglicht, der andernfalls über die Standard-Java-API nicht möglich wäre. Es stellt die Schnittstelle zu anderen Programmiersprachen wie C oder C++ dar.
</p><p>Mit JNI ist es möglich, Funktionen einer <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>-<a href="Dynamic_Link_Library" title="Dynamic Link Library">DLL</a> oder einer <i><a href="Shared_Library" class="mw-redirect" title="Shared Library">shared library</a></i> unter <a href="Linux" title="Linux">Linux</a> bzw. <a href="Mac_OS_X" class="mw-redirect" title="Mac OS X">Mac OS X</a>, die in <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a> oder <a href="C%2B%2B" title="C++">C++</a> programmiert sind, aus Java aufzurufen. Umgekehrt können „native“ Programme Java-Methoden über JNI aufrufen oder eine <a href="Java_Virtual_Machine" title="Java Virtual Machine">JVM</a> ausführen.
</p>
<div class="mw-heading mw-heading3"><h3 id="Java_ruft_native_Methode_auf">Java ruft native Methode auf</h3></div>
<p>Um aus Java eine native Methode aufzurufen, muss diese zunächst als „<code>native</code>“ deklariert werden. Zudem muss das Objekt selbst die native Programmbibliothek mit dem Aufruf von „<code>System.loadLibrary("<i>&lt;Name der Bibliothek&gt;</i>")</code>“ laden, bevor die native Methode selbst aufgerufen werden kann.
</p><p>Das Java-Programm wird übersetzt und anschließend mit dem Softwarewerkzeug <i><code>javah</code></i> eine <a href="Header-Datei" title="Header-Datei">Header-Datei</a> erstellt, die die Funktionsdeklaration vorgibt. Mit dieser Header-Datei kann dann die native Programmbibliothek erstellt werden.
</p><p>In der nativen Programmbibliothek müssen spezielle Typen für primitive und komplexe Datentypen verwendet werden. Beispielsweise wird für ein Wahrheitswert <code>jboolean</code> verwendet, anstatt der Typ <code>boolean</code> und <code>jdouble</code> für Variablen vom Typ <code>double</code>. Außer den Abbildungen für primitive Typen, existieren auch Abbildungen für komplexe Typen. Zu den primitiven und komplexen Typen zählen folgende:
</p>
<style data-mw-deduplicate="TemplateStyles:r256979673">
/* start https://de.wikipedia.org/ */


.mw-parser-output .vl-mehrere-bilder{margin-top:.5em}.mw-parser-output .vl-mehrere-bilder-kopf{clear:both;font-weight:bold}.mw-parser-output .vl-mehrere-bilder-horizontal{float:left;padding:1px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .vl-mehrere-bilder .thumbimage{background:none}html.skin-theme-clientpref-night .mw-parser-output .vl-mehrere-bilder .thumbimage:not([style*="background"]) span:not([class]) img{background-color:var(--background-color-base-fixed,#ffffff);color:var(--color-base-fixed,#202122);filter:brightness(0.8)}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .vl-mehrere-bilder .thumbimage{background:none}html.skin-theme-clientpref-os .mw-parser-output .vl-mehrere-bilder .thumbimage:not([style*="background"]) span:not([class]) img{background-color:var(--background-color-base-fixed,#ffffff);color:var(--color-base-fixed,#202122);filter:brightness(0.8)}}


/* end https://de.wikipedia.org/ */
</style><div class="thumb centered vl-mehrere-bilder" style="width:750px;"><div class="thumbinner"><div class="vl-mehrere-bilder-horizontal" style="width:304px;"><div class="thumbimage"><span typeof="mw:File"></span></div><div class="thumbcaption">JNI: Primitive Typen</div></div><div class="vl-mehrere-bilder-horizontal" style="width:432px;"><div class="thumbimage"><span typeof="mw:File"></span></div><div class="thumbcaption">JNI: Komplexe Typen</div></div><div style="clear:both;"></div>
<div style="clear:both;"></div>
</div></div>
<p>Eine der populärsten Anwendungen von JNI ist die Programmbibliothek <i><a href="Standard_Widget_Toolkit" title="Standard Widget Toolkit">Standard Widget Toolkit</a></i> (SWT), die über JNI die Verwendung von Elementen der <a href="Grafische_Benutzeroberfl%C3%A4che" title="Grafische Benutzeroberfläche">Grafischen Benutzeroberfläche</a> des <a href="Betriebssystem" title="Betriebssystem">Betriebssystems</a> ermöglicht.
</p>
<div class="mw-heading mw-heading3"><h3 id="Natives_Programm_ruft_Java_auf">Natives Programm ruft Java auf</h3></div>
<p>Aus einem nativen Programm kann Java-Code aufgerufen werden. Dies ist beispielsweise notwendig, um eine enge Verzahnung zwischen Java und dem nativen Programm zu ermöglichen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Java_Native_Access" title="Java Native Access">Java Native Access</a> (JNA) – Alternative zu JNI</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/7/docs/technotes/guides/jni/index.html"><i>Java Native Interface</i></a> – offizielle Dokumentation bei <a href="Oracle" title="Oracle">Oracle</a></li>
<li><a rel="nofollow" class="external text" href="http://forge.objectweb.org/projects/javaservice">Projektseite des JavaService</a></li>
<li><a rel="nofollow" class="external text" href="http://gcc.gnu.org/onlinedocs/gcj/About-CNI.html">Compiled Native Interface (CNI)</a> Alternative zu JNI (siehe auch <a href="GNU_Compiler_for_Java" title="GNU Compiler for Java">GNU Compiler for Java</a>)</li>
<li><a rel="nofollow" class="external text" href="http://johannburkard.de/software/nativecall/">NativeCall</a> Alternative, um native Methoden ohne JNI aus Java aufzurufen</li>
<li><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html">JNI Typen</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-10-21" href="https://de.wikipedia.org/wiki/?title=Java_Native_Interface&amp;oldid=249609234">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>